package com.detection.yolo.config;

import java.util.*;

public final class ODConfig {

    public static final Integer lineThicknessRatio = 333;

    public static final Double fontSizeRatio = 1080.0;

    public static final int REG_MAX = 16; // 与模型参数一致
    public static final float CONF_THRESHOLD = 0.5f;
    public static final float IOU_THRESHOLD = 0.5f;

    private static final List<String> default_names = new ArrayList<>(Arrays.asList(
            "person", "bicycle", "car", "motorcycle", "airplane", "bus", "train",
            "truck", "boat", "traffic light", "fire hydrant", "stop sign", "parking meter",
            "bench", "bird", "cat", "dog", "horse", "sheep", "cow", "elephant", "bear",
            "zebra", "giraffe", "backpack", "umbrella", "handbag", "tie", "suitcase",
            "frisbee", "skis", "snowboard", "sports ball", "kite", "baseball bat",
            "baseball glove", "skateboard", "surfboard", "tennis racket", "bottle",
            "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple",
            "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut",
            "cake", "chair", "couch", "potted plant", "bed", "dining table", "toilet",
            "tv", "laptop", "mouse", "remote", "keyboard", "cell phone", "microwave",
            "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors",
            "teddy bear", "hair drier", "toothbrush"));

    private static final List<String> names = new ArrayList<>(Arrays.asList(
            "no_helmet", "helmet"));

    private final Map<String, double[]> colors;

    public ODConfig() {
        this.colors = new HashMap<>();
        default_names.forEach(name->{
            Random random = new Random();
            double[] color = {random.nextDouble()*256, random.nextDouble()*256, random.nextDouble()*256};
            colors.put(name, color);
        });
    }

    public String getName(int clsId) {
        return names.get(clsId);
    }

    public double[] getColor(int clsId) {
        return colors.get(getName(clsId));
    }

    public double[] getNameColor(String Name){
        return colors.get(Name);
    }

    public double[] getOtherColor(int clsId) {
        return colors.get(default_names.get(clsId));
    }

}
//package cn.ck.config;
//
//import org.opencv.core.Scalar;
//
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * 目标检测配置类
// */
//public class ODConfig {
//
//    // 默认配置值
//    private static final int DEFAULT_LINE_THICKNESS_RATIO = 300;
//    private static final int DEFAULT_FONT_SIZE_RATIO = 50;
//    private static final float DEFAULT_CONFIDENCE_THRESHOLD = 0.5f;
//    private static final int DEFAULT_MAX_PERSON_COUNT = 10;
//
//    // 线条粗细比例
//    private int lineThicknessRatio = DEFAULT_LINE_THICKNESS_RATIO;
//
//    // 字体大小比例
//    private int fontSizeRatio = DEFAULT_FONT_SIZE_RATIO;
//
//    // 置信度阈值
//    private float confidenceThreshold = DEFAULT_CONFIDENCE_THRESHOLD;
//
//    // 最大人员数量（用于人群密度告警）
//    private int maxPersonCount = DEFAULT_MAX_PERSON_COUNT;
//
//    // 保存图片的路径
//    private String savePicPath = "detection_result.jpg";
//
//    // 类别颜色映射
//    private final Map<Integer, Scalar> colorMap = new HashMap<>();
//
//    // 构造函数
//    public ODConfig() {
//        initDefaultColors();
//    }
//
//    /**
//     * 初始化默认颜色
//     */
//    private void initDefaultColors() {
//        // 人员检测颜色
//        colorMap.put(0, new Scalar(0, 255, 0)); // 绿色
//
//        // 抽烟检测颜色
//        colorMap.put(1, new Scalar(0, 0, 255)); // 红色
//
//        // 其他类别颜色
//        colorMap.put(2, new Scalar(255, 0, 0)); // 蓝色
//        colorMap.put(3, new Scalar(255, 255, 0)); // 黄色
//    }
//
//    /**
//     * 获取线条粗细比例
//     */
//    public int getLineThicknessRatio() {
//        return lineThicknessRatio;
//    }
//
//    /**
//     * 设置线条粗细比例
//     */
//    public void setLineThicknessRatio(int lineThicknessRatio) {
//        this.lineThicknessRatio = lineThicknessRatio;
//    }
//
//    /**
//     * 获取字体大小比例
//     */
//    public int getFontSizeRatio() {
//        return fontSizeRatio;
//    }
//
//    /**
//     * 设置字体大小比例
//     */
//    public void setFontSizeRatio(int fontSizeRatio) {
//        this.fontSizeRatio = fontSizeRatio;
//    }
//
//    /**
//     * 获取置信度阈值
//     */
//    public float getConfidenceThreshold() {
//        return confidenceThreshold;
//    }
//
//    /**
//     * 设置置信度阈值
//     */
//    public void setConfidenceThreshold(float confidenceThreshold) {
//        this.confidenceThreshold = confidenceThreshold;
//    }
//
//    /**
//     * 获取最大人员数量
//     */
//    public int getMaxPersonCount() {
//        return maxPersonCount;
//    }
//
//    /**
//     * 设置最大人员数量
//     */
//    public void setMaxPersonCount(int maxPersonCount) {
//        this.maxPersonCount = maxPersonCount;
//    }
//
//    /**
//     * 获取保存图片的路径
//     */
//    public String getSavePicPath() {
//        return savePicPath;
//    }
//
//    /**
//     * 设置保存图片的路径
//     */
//    public void setSavePicPath(String savePicPath) {
//        this.savePicPath = savePicPath;
//    }
//
//    /**
//     * 获取类别颜色
//     */
//    public Scalar getOtherColor(int classId) {
//        return colorMap.getOrDefault(classId, new Scalar(255, 255, 255)); // 默认白色
//    }
//
//    /**
//     * 添加或更新类别颜色
//     */
//    public void setColor(int classId, Scalar color) {
//        colorMap.put(classId, color);
//    }
//}
